// 购物车模块

import { addToShopcart, queryGoodsUser, updateCartCount, deleteCartList,goPay } from '@/api/cart.js'
import { Message } from 'element-ui'
const cart = {
  namespaced: true,
  state: {
    list: [] // 购物车列表
  },
  // vuex计算属性  有些数据需要根据state中的数据经过一定的计算得到 getters
  getters: {
    // 总钱数  = 数组中的每一项的单价 * 数量 之和  reduce
    allPrice(state) {
      const newlist = []
      state.list.forEach(item => {
        if (item.selected) {
          newlist.push(item)
        }
      })
      return newlist.reduce((a, c) => {
        return a + Number(c.num * c.gprice)
      }, 0)
    },
    // 总数
    allCount(state) {
      return state.list.reduce((a, c) => a + c.num, 0)
    },
    // 选中项count之和
    selectedCount(state) {
      return state.list.filter(item => item.selected).length
    },
    // 选中的物品
    orderData(state) {
      return state.list.filter(item => item.selected)
    },
    // 选中项的钱数之和
    selectedPrice(state) {
      return state.list.filter(item => item.selected).reduce((a, c) => a + Number(c.price), 0)
    }
  },
  mutations: {
    setList(state, newList) {
      // 给个数据判断是否选中
      newList.forEach(element => {
        element.selected = false
      })
      state.list = newList
    },
    asyncCheck(state, newList) {
      state.list = newList
    },
    // 全选
    allSelected(state, Allcheck) {
      let newlist = state.list
      newlist.forEach(i => {
        i.selected = Allcheck
      })
      state.list = newlist
    },
    // 单选按钮
    radioSelecte(state, item) {
      console.log(item);
      state.list.forEach(i => {
        if(i.cartId == item.cartId){
          i.is = item.is
        }
      })
    }
  },
  actions: {
    // 获取购物车
    async asyncGetCartList(ctx, data) {
      const res = await queryGoodsUser(data)
      if (res.data.data) {
        ctx.commit('setList', res.data.data)
      }
    },
    // 加入购物车
    async asyncInsertCart(ctx, data) {
      let newList = ctx.state.list
      if (newList.some(item => item.gid == data.goodsId)) {
        // 已存在，添加数量即可,调用asyncChangeNum修改数量
        let goods = newList.find(item => item.gid == data.goodsId)
        let num = goods.num + data.num
        ctx.dispatch('asyncChangeNum', { cartId: goods.cartId, num, sumprice: data.sumprice })
        Message({ message: '添加成功', type: 'success' })
      } else {
        // 不存在，加入到购物车
        const res = await addToShopcart(data)
        if (res.data.code == '000') {
          Message({ message: '添加成功', type: 'success' })
        } else {
          Message({ message: '服务器错误', type: 'warning' })
        }
        // 获取购物车
        ctx.dispatch('asyncGetCartList', { userId: ctx.rootState.user.profile.userId })
      }
    },
    // 删除购物车
    async updateList(ctx, data) {
      const res = await deleteCartList(data)
      if (res.data.data !== 1) {
        Message({ message: '服务器错误', type: 'warning' })
      } else {
        // 获取购物车
        Message({ message: '删除成功', type: 'success' })
        ctx.dispatch('asyncGetCartList', { userId: ctx.rootState.user.profile.userId })
      }
    },
    // 修改数量
    async asyncChangeNum(ctx, good) {
      const res = await updateCartCount(good)
      console.log(res)
      if (res.data.data !== 1) {
        Message({ message: '服务器错误', type: 'warning' })
      } else {
        // 获取购物车
        ctx.dispatch('asyncGetCartList', { userId: ctx.rootState.user.profile.userId })
      }
    },
    // 加我的订单
    async myOrder(ctx,data){
      const res = await goPay(data)
      if(res.status == 200){
        ctx.getters.orderData.forEach(item => {
          ctx.dispatch('updateList',{cartId:item.cartId,userId:data.userId})
        })
        window.open(res.data)
      }

    }
  }
}

export default cart
